home *** CD-ROM | disk | FTP | other *** search
/ Merciful 2 / Merciful - Disc 2.iso / software / a / aplayerv1.3+keyfile.lha / APlayer / Files / Developer.lha / Examples / apFredLibrary.S next >
Text File  |  1994-09-20  |  7KB  |  362 lines

  1. ; $VER: Fred.library 2.1
  2. ;
  3.  
  4.     INCDIR    "Includes3.0:Include3.0/"
  5.     INCLUDE    "Exec/Types.i"
  6.     INCLUDE    "Own/SystemBases.i"
  7.     INCLUDE    "Own/SystemStructures.i"
  8.     INCLUDE    "Own/SystemOffsets.i"
  9.     INCLUDE    "Own/AccessiblePlayer.i"
  10.  
  11.  
  12. VERSION        =    2
  13. REVISION    =    1
  14.  
  15. TRUE        =    -1
  16. FALSE        =    0
  17.  
  18. ; Library Data
  19.  
  20. LN_Name        =    10
  21. LN_Type        =    8
  22. NT_Library    =    9
  23.  
  24. LIBB_Summing    =    0
  25. LIBB_Changed    =    1
  26. LIBB_SumUsed    =    2
  27. LIBB_DelExp    =    3
  28.  
  29. LIBF_Summing    =    1<<LIBB_Summing
  30. LIBF_Changed    =    1<<LIBB_Changed
  31. LIBF_SumUsed    =    1<<LIBB_SumUsed
  32. LIBF_DelExp    =    1<<LIBB_DelExp
  33.  
  34. ; Macros
  35.  
  36. INBYTE    MACRO
  37.     dc.b    %11100000,0
  38.     dc.w    \1
  39.     dc.b    \2,0
  40.     ENDM
  41.  
  42. INWORD    MACRO
  43.     dc.b    %11010000,0
  44.     dc.w    \1,\2
  45.     ENDM
  46.  
  47. INLONG    MACRO
  48.     dc.b    %11000000,0
  49.     dc.w    \1
  50.     dc.l    \2
  51.     ENDM
  52.  
  53. ; Library Base Structure
  54.  
  55.     STRUCTURE LibraryStruct,0
  56.     STRUCT    LIB_Node,14
  57.     UBYTE    LIB_Flags
  58.     UBYTE    LIB_Pad
  59.     UWORD    LIB_NegSize
  60.     UWORD    LIB_PosSize
  61.     UWORD    LIB_Version
  62.     UWORD    LIB_Revision
  63.     APTR    LIB_IDString
  64.     ULONG    LIB_Sum
  65.     UWORD    LIB_OpenCnt
  66.  
  67.     LONG    LIB_SegList
  68.     LABEL    LibraryStruct_SIZEOF
  69.  
  70.  
  71.     SECTION    Fred.library,CODE
  72.  
  73. START    moveq    #0,d0
  74.     rts
  75. ;------------------------------------------------------------------------------
  76. LIBNAME    dc.b    "apFred.library",0
  77.  
  78. LIBID    dc.b    "Fred.library 2.1 (18-September-1994)",0
  79.     even
  80. ;------------------------------------------------------------------------------
  81. ; ROMTAG Structure
  82. ;
  83.  
  84. ROMTAG    dc.w    $4afc            ;ROMTAG Indentifier
  85.     dc.l    romtag
  86.     dc.l    slut
  87.     dc.b    $80            ;Flags
  88.     dc.b    version
  89.     dc.b    $09            ;Type Of Module
  90.     dc.b    $00            ;Initialization Priority
  91.     dc.l    libname
  92.     dc.l    libid
  93.     dc.l    autinit            ;Pointer To AUTOINIT Table
  94. ;------------------------------------------------------------------------------
  95. ; AUTOINIT Table
  96. ;
  97.  
  98. AUTINIT    dc.l    LibraryStruct_SIZEOF    ;Size Of Structure AFTER Base Address
  99.     dc.l    vector            ;Pointer To Vector Table
  100.     dc.l    inittab            ;Pointer To Init Structure
  101.     dc.l    init            ;Pointer To Init Routine
  102. ;------------------------------------------------------------------------------
  103. ; Init Table
  104. ;
  105.  
  106. INITTAB    INBYTE    LN_Type,NT_Library
  107.     INBYTE    LIB_Flags,LIBF_SumUsed!LIBF_Changed
  108.     INWORD    LIB_Version,version
  109.     INWORD    LIB_Revision,revision
  110.     INLONG    LN_Name,libname
  111.     INLONG    LIB_IDString,libid
  112.     dc.l    0
  113. ;------------------------------------------------------------------------------
  114. ; Vector Table
  115. ;
  116.  
  117. VECTOR    dc.w    -1
  118.     dc.w    opnlib-vector,clslib-vector,expunge-vector,extfunc-vector
  119.     dc.w    FP_GetTags-vector
  120.     dc.w    -1
  121. ;------------------------------------------------------------------------------
  122. ; Init Routine
  123. ;
  124.  
  125. INIT    movem.l    d1-d7/a0-a6,-(sp)
  126.     move.l    d0,a4            ;Base Address
  127.     move.l    a0,LIB_SegList(a4)
  128.  
  129.     move.l    a4,d0
  130.     movem.l    (sp)+,d1-d7/a0-a6
  131.     rts
  132. ;------------------------------------------------------------------------------
  133. ; Offset  -6: Open Library
  134. ;
  135.  
  136. OPNLIB    addq.w    #1,LIB_OpenCnt(a6)
  137.     bclr    #LIBB_DelExp,LIB_Flags(a6)
  138.     move.l    a6,d0
  139.     rts
  140. ;------------------------------------------------------------------------------
  141. ; Offset -12: Close Library
  142. ;
  143.  
  144. CLSLIB    moveq    #0,d0
  145.     subq.w    #1,LIB_OpenCnt(a6)
  146.     bne.b    clslibo
  147.     btst    #LIBB_DelExp,LIB_Flags(a6)
  148.     bne.b    expunge
  149. CLSLIBO    rts
  150. ;------------------------------------------------------------------------------
  151. ; Offset -18: Expunge
  152. ;
  153.  
  154. EXPUNGE    movem.l    d1-d7/a0-a6,-(sp)
  155.     move.l    a6,a4
  156.     tst.w    LIB_OpenCnt(a4)
  157.     beq.b    exp1
  158.     bset    #LIBB_DelExp,LIB_Flags(a4)
  159.     moveq    #0,d0
  160.     bra.b    expungo
  161.  
  162. EXP1    move.l    4.w,a6
  163.     move.l    LIB_SegList(a4),d2
  164.     move.l    a4,a1
  165.     jsr    Remove(a6)
  166.  
  167.     move.l    a4,a1
  168.     moveq    #0,d0
  169.     move.w    LIB_NegSize(a4),d0
  170.     sub.l    d0,a1
  171.     add.w    LIB_PosSize(a4),d0
  172.     jsr    FreeMem(a6)
  173.     move.l    d2,d0
  174.  
  175. EXPUNGO    movem.l    (sp)+,d1-d7/a0-a6
  176.     rts
  177. ;------------------------------------------------------------------------------
  178. ; Offset -24: ExtFunc
  179. ;
  180.  
  181. EXTFUNC    moveq    #0,d0
  182.     rts
  183. ;------------------------------------------------------------------------------
  184. ;******************************************************************************
  185. ;* Fred Player
  186. ;******************************************************************************
  187. ;------------------------------------------------------------------------------
  188. ; Offset -30: GetTags
  189. ;
  190. ; IN :    Nothing
  191. ;
  192. ; OUT:    A0 = Pointer To A TagList
  193. ;
  194.  
  195. FP_GetTags
  196.     lea    FP_Tags(pc),a0
  197.     rts
  198.  
  199. FP_Tags    dc.l    APT_RequestVersion,2
  200.     dc.l    APT_Check,FP_TestModule
  201.  
  202.     dc.l    APT_InitPlayer,FP_InitPlayer
  203.     dc.l    APT_EndPlayer,FP_EndPlayer
  204.     dc.l    APT_InitSound,FP_InitSound
  205.     dc.l    APT_EndSound,FP_EndSound
  206.     dc.l    APT_Interrupt,FP_PlayModule
  207.  
  208.     dc.l    APT_PlayerName,fpname
  209.     dc.l    APT_Description,fpdes
  210.  
  211.     dc.l    APT_SubSong,FP_SubSong
  212.  
  213.     dc.l    APT_Pause,TRUE
  214.     dc.l    TAG_END
  215.  
  216. FPNAME    dc.b    "Fred Player",0
  217. FPDES    dc.b    "Original player by JC & Fred.",10
  218.     dc.b    "Adapted by Tax.",0
  219.     even
  220. ;------------------------------------------------------------------------------
  221. ; TestModule
  222. ;
  223. ; IN :    A1 = Address
  224. ;
  225. ; OUT:    D0 = Success (0=Unknown, 1=Ok, 2=Error)
  226. ;
  227.  
  228. FP_TestModule
  229.     movem.l    d1-d2/a1/a3,-(sp)
  230.  
  231.     cmp.w    #$4efa,(a1)
  232.     bne.b    .tsmod3
  233.     cmp.w    #$4efa,4(a1)
  234.     bne.b    .tsmod3
  235.     cmp.w    #$4efa,8(a1)
  236.     bne.b    .tsmod3
  237.     cmp.w    #$4efa,12(a1)
  238.     bne.b    .tsmod3
  239.  
  240.     moveq    #0,d1
  241.     move.w    2(a1),d1
  242.     add.l    d1,a1
  243.     moveq    #4-1,d2
  244. .TSMOD1    cmp.w    #$123a,2(a1)
  245.     bne.b    .tsmod2
  246.     cmp.w    #$b001,6(a1)
  247.     beq.b    .tsmod4
  248. .TSMOD2    addq.l    #2,a1
  249.     dbra    d2,.tsmod1
  250.  
  251. .TSMOD3    moveq    #0,d0            ;Unknown
  252.     bra.b    .tsmodo
  253.  
  254. .TSMOD4    move.w    4(a1),d1
  255.     add.l    d1,a1
  256.  
  257.     moveq    #0,d1
  258.     move.b    4(a1),d1
  259.     addq.w    #1,d1
  260.     move.w    d1,maxtune
  261.  
  262.     moveq    #1,d0            ;Ok
  263. .TSMODO    movem.l    (sp)+,d1-d2/a1/a3
  264.     rts
  265. ;------------------------------------------------------------------------------
  266. ; InitPlayer
  267. ;
  268. ; IN :    A1 = Address
  269. ;
  270. ; OUT:    D1 = Success (0=Error)
  271. ;
  272.  
  273. FP_InitPlayer
  274.     movem.l    d0/a0,-(sp)
  275.     move.l    APG_AllocChannels(a5),a0
  276.     jsr    (a0)
  277.     move.l    d0,d1
  278.     movem.l    (sp)+,d0/a0
  279.     rts
  280. ;------------------------------------------------------------------------------
  281. ; EndPlayer
  282. ;
  283. ; IN :    A1 = Address
  284. ;
  285. ; OUT:    Nothing
  286. ;
  287.  
  288. FP_EndPlayer
  289.     move.l    a0,-(sp)
  290.     move.l    APG_FreeChannels(a5),a0
  291.     jsr    (a0)
  292.     move.l    (sp)+,a0
  293.     rts
  294. ;------------------------------------------------------------------------------
  295. ; InitSound
  296. ;
  297. ; IN :    A1 = Address
  298. ;
  299. ; OUT:    Nothing
  300. ;
  301.  
  302. FP_InitSound
  303.     movem.l    d0-d7/a0-a6,-(sp)
  304.  
  305.     move.w    APG_Tune(a5),d0
  306.     ext.l    d0
  307.     jsr    (a1)            ;Init Module
  308.  
  309.     movem.l    (sp)+,d0-d7/a0-a6
  310.     rts
  311. ;------------------------------------------------------------------------------
  312. ; EndSound
  313. ;
  314. ; IN :    A1 = Address
  315. ;
  316. ; OUT:    Nothing
  317. ;
  318.  
  319. FP_EndSound
  320.     movem.l    d0-d7/a0-a6,-(sp)
  321.  
  322.     moveq    #0,d1
  323.     jsr    8(a1)            ;Stop Module Playing
  324.  
  325.     moveq    #0,d0
  326.     move.w    d0,$dff0a8
  327.     move.w    d0,$dff0b8
  328.     move.w    d0,$dff0c8
  329.     move.w    d0,$dff0d8
  330.  
  331.     movem.l    (sp)+,d0-d7/a0-a6
  332.     rts
  333. ;------------------------------------------------------------------------------
  334. ; PlayModule
  335. ;
  336. ; IN :    A1 = Address
  337. ;    D1 = VBlank/Cia (0=CIA)
  338. ;
  339. ; OUT:    Nothing
  340. ;
  341.  
  342. FP_PlayModule
  343.     movem.l    d0-d7/a0-a6,-(sp)
  344.     jsr    4(a1)            ;Play Module
  345.     movem.l    (sp)+,d0-d7/a0-a6
  346.     rts
  347. ;------------------------------------------------------------------------------
  348. ; SubSong
  349. ;
  350. ; IN :    A1 = Address
  351. ;
  352. ; OUT:    A0 = Pointer To Two SubSongs Words
  353. ;
  354.  
  355. FP_SubSong
  356.     lea    maxtune(pc),a0
  357.     rts
  358.  
  359. MAXTUNE    dc.w    0,0
  360. ;------------------------------------------------------------------------------
  361. SLUT
  362.